# -*- coding: utf-8 -*-
# generatorを使おうと思ったんですけど、双方向に対応してなかったので、
# 簡単な双方向の外部イテレータを用意しました。
# require 'generator'

class BidirectionalGenerator # < Generator

  def initialize(enum)
    @enum = enum
    @index = -1
  end
  
  def index
    @index
  end
  
  def current
    @enum[@index]
  end

  def last?
    @index >= (@enum.length - 1)
  end
  alias_method :end?, :last?
  
  def last
    @index = (@enum.length - 1)
  end
  
  def next?
    !last?
  end
  
  def next
    @index += 1
  end
  
  def first?
    @index <= 0
  end
  
  def first
    @index = 0
  end
  
  def previous?
    !first?
  end
  
  def previous
    @index -= 1
  end
  
  alias_method :prev, :previous
  alias_method :prev?, :previous?
end
